iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0

你想將你遊戲最棒的成就記錄下來嗎?

  • 本篇將帶領大家透過虛擬鍵盤套用在遊戲中,讓遊戲得分最高者可以顯示在遊戲的成就上,並顯示其分數。
  • 本篇將用Chase The Pizza專案來演示

成品效果

圖片

  • 原先(破紀錄前)

圖片

  • 後來(破紀錄後)

圖片



製作教學

前置操作(非常重要!!):

  • 點選此處後按下edit code即可下載並編輯此專案
  • 複製https://github.com/riknoll/arcade-custom-menu來擴充功能
    (↑↑↑如何擴充功能? 在第三篇這裡有教學)

使用積木 + Javascript

積木雖可讓我們能更簡單了解程式的內容,卻無法完整呈現我們想使用的功能,需要搭配Javascript來補積木編排的不足,因此本篇將會用積木和 Javascript兩部分來完成


  • Part1 : 積木部分

    積木部分主要是先完成選單功能以及紀錄最高分數

1.選擇擴展BlockMenu中on menu option selected積木,並將當啟動時積木裡的所有積木移動到裡面
圖片


2.選擇擴展BlockMenu中show grid menu fullscreen with option 積木 放入到 當啟動時 積木中,並將fullsceen改成bottom half、grid改為list ,並在後面的陣列輸入新遊戲、成就
圖片


3.建立3個變數分別為name、high、record變數record設為0積木放入到當啟動時 積木,並將資訊類別最高得分積木放入到變數record設為0積木的裡面
圖片


4.使用資訊類別當倒數結束積木,然後在裡面將積木組合成如果(得分>變數record)那麼變數record設為得分,最後在如果()那麼()積木外放入遊戲類別遊戲結束 結果( )積木,並在( )內放入BlockMenu中放入is menu open積木
圖片


5.在on menu option selected積木中放入積木並組合成如果(option = 新遊戲)那麼( ),並將原本在on menu option selected裡的所有積木移動到裡面
圖片


6.放入一組積木如果(option = 成就)那麼( )on menu option selected積木中,並將BlockMenu中close menu積木放入到如果( )那麼( )的裡面。(兩組積木都要放入)
圖片


7.在如果(option = 成就)那麼( )積木中再放入一組積木如果(A鍵被按住)那麼( ),然後在裡面放入show list menu bottom half with option (新遊戲) (成就)
圖片


8.在當角色sprite類別player重疊角色othersprite類別Food積木中放入變數high改變"1"積木
圖片

↑↑↑積木部分已結束↑↑↑


  • Part2 : Javascript部分

    Javascript部分主要是完成紀錄名字的功能

9.將變數name的文字初始為沒有值的,讓變數high每次遊戲開始時都會歸零


//定義初始變數值
let high = 0
let name: string = null
//

info.onCountdownEnd(function () {
    if (info.score() > record) {
        record = info.score()
    }
    game.over(blockMenu.isMenuOpen())
})

sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
    record += 1
    info.changeScoreBy(1)
    info.startCountdown(10)
    otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
    if (option == "新遊戲") {
        blockMenu.closeMenu()
        scene.setBackgroundColor(7)
        smiley = sprites.create(img`
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 . 
            . 5 5 5 f f 5 5 5 f f 5 5 5 . . 
            . 5 5 5 5 5 f f f 5 5 5 5 5 . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . . . . . . . . . . . . . . . 
            `, SpriteKind.Player)
        controller.moveSprite(smiley, 100, 100)
        smiley.setStayInScreen(true)
        pizza = sprites.create(img`
            . . . . . . b b b b . . . . . . 
            . . . . . . b 4 4 4 b . . . . . 
            . . . . . . b b 4 4 4 b . . . . 
            . . . . . b 4 b b b 4 4 b . . . 
            . . . . b d 5 5 5 4 b 4 4 b . . 
            . . . . b 3 2 3 5 5 4 e 4 4 b . 
            . . . b d 2 2 2 5 7 5 4 e 4 4 e 
            . . . b 5 3 2 3 5 5 5 5 e e e e 
            . . b d 7 5 5 5 3 2 3 5 5 e e e 
            . . b 5 5 5 5 5 2 2 2 5 5 d e e 
            . b 3 2 3 5 7 5 3 2 3 5 d d e 4 
            . b 2 2 2 5 5 5 5 5 5 d d e 4 . 
            b d 3 2 d 5 5 5 d d d 4 4 . . . 
            b 5 5 5 5 d d 4 4 4 4 . . . . . 
            4 d d d 4 4 4 . . . . . . . . . 
            4 4 4 4 . . . . . . . . . . . . 
            `, SpriteKind.Food)
        info.startCountdown(10)
        info.setScore(0)
    }
    if (option == "成就") {
        blockMenu.closeMenu()
        if (controller.A.isPressed()) {
            blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
        }
    }
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()



10.做三個function並自己命名 writePlayerInfoshowPlayerInforeadPlayerInfo
補充:function不能在任何一個功能區塊內,此才能為全域功能使所有區塊內使用都能識別


//定義初始變數值
let high = 0
let name: string = null
//

///定義三個function
function writePlayerInfo () {
   
}
function showPlayerInfo () {
   
}
function readPlayerInfo () {
   
}
///

info.onCountdownEnd(function () {
    if (info.score() > record) {
        record = info.score()
    }
    game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
    record += 1
    info.changeScoreBy(1)
    info.startCountdown(10)
    otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
    if (option == "新遊戲") {
        blockMenu.closeMenu()
        scene.setBackgroundColor(7)
        smiley = sprites.create(img`
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 . 
            . 5 5 5 f f 5 5 5 f f 5 5 5 . . 
            . 5 5 5 5 5 f f f 5 5 5 5 5 . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . . . . . . . . . . . . . . . 
            `, SpriteKind.Player)
        controller.moveSprite(smiley, 100, 100)
        smiley.setStayInScreen(true)
        pizza = sprites.create(img`
            . . . . . . b b b b . . . . . . 
            . . . . . . b 4 4 4 b . . . . . 
            . . . . . . b b 4 4 4 b . . . . 
            . . . . . b 4 b b b 4 4 b . . . 
            . . . . b d 5 5 5 4 b 4 4 b . . 
            . . . . b 3 2 3 5 5 4 e 4 4 b . 
            . . . b d 2 2 2 5 7 5 4 e 4 4 e 
            . . . b 5 3 2 3 5 5 5 5 e e e e 
            . . b d 7 5 5 5 3 2 3 5 5 e e e 
            . . b 5 5 5 5 5 2 2 2 5 5 d e e 
            . b 3 2 3 5 7 5 3 2 3 5 d d e 4 
            . b 2 2 2 5 5 5 5 5 5 d d e 4 . 
            b d 3 2 d 5 5 5 d d d 4 4 . . . 
            b 5 5 5 5 d d 4 4 4 4 . . . . . 
            4 d d d 4 4 4 . . . . . . . . . 
            4 4 4 4 . . . . . . . . . . . . 
            `, SpriteKind.Food)
        info.startCountdown(10)
        info.setScore(0)
    }
    if (option == "成就") {
        blockMenu.closeMenu()
        if (controller.A.isPressed()) {
            blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
        }
    }
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()

11.settings.writeString( )可將輸入的名字寫入到Arcade的內建記憶體
補充:存儲上限為16KB


//定義初始變數值
let high = 0
let name: string = null
//

///定義三個function
function writePlayerInfo () {
    settings.writeString('Name', name)
}
function showPlayerInfo () {
   
}
function readPlayerInfo () {
   
}
///

info.onCountdownEnd(function () {
    if (info.score() > record) {
        record = info.score()
    }
    game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
    record += 1
    info.changeScoreBy(1)
    info.startCountdown(10)
    otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
    if (option == "新遊戲") {
        blockMenu.closeMenu()
        scene.setBackgroundColor(7)
        smiley = sprites.create(img`
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 . 
            . 5 5 5 f f 5 5 5 f f 5 5 5 . . 
            . 5 5 5 5 5 f f f 5 5 5 5 5 . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . . . . . . . . . . . . . . . 
            `, SpriteKind.Player)
        controller.moveSprite(smiley, 100, 100)
        smiley.setStayInScreen(true)
        pizza = sprites.create(img`
            . . . . . . b b b b . . . . . . 
            . . . . . . b 4 4 4 b . . . . . 
            . . . . . . b b 4 4 4 b . . . . 
            . . . . . b 4 b b b 4 4 b . . . 
            . . . . b d 5 5 5 4 b 4 4 b . . 
            . . . . b 3 2 3 5 5 4 e 4 4 b . 
            . . . b d 2 2 2 5 7 5 4 e 4 4 e 
            . . . b 5 3 2 3 5 5 5 5 e e e e 
            . . b d 7 5 5 5 3 2 3 5 5 e e e 
            . . b 5 5 5 5 5 2 2 2 5 5 d e e 
            . b 3 2 3 5 7 5 3 2 3 5 d d e 4 
            . b 2 2 2 5 5 5 5 5 5 d d e 4 . 
            b d 3 2 d 5 5 5 d d d 4 4 . . . 
            b 5 5 5 5 d d 4 4 4 4 . . . . . 
            4 d d d 4 4 4 . . . . . . . . . 
            4 4 4 4 . . . . . . . . . . . . 
            `, SpriteKind.Food)
        info.startCountdown(10)
        info.setScore(0)
    }
    if (option == "成就") {
        blockMenu.closeMenu()
        if (controller.A.isPressed()) {
            blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
        }
    }
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()

12.settings.readString( )可將記憶體存儲的資料進行讀取


//定義初始變數值
let high = 0
let name: string = null
//

///定義三個function

//將資料寫入記憶體
function writePlayerInfo () {
    settings.writeString('Name', name)
}

function showPlayerInfo () {
   
}

//讀取寫入記憶體的資料
function readPlayerInfo () {
    name = settings.readString('Name')
}
///

info.onCountdownEnd(function () {
    if (info.score() > record) {
        record = info.score()
    }
    game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
    record += 1
    info.changeScoreBy(1)
    info.startCountdown(10)
    otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
    if (option == "新遊戲") {
        blockMenu.closeMenu()
        scene.setBackgroundColor(7)
        smiley = sprites.create(img`
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 . 
            . 5 5 5 f f 5 5 5 f f 5 5 5 . . 
            . 5 5 5 5 5 f f f 5 5 5 5 5 . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . . . . . . . . . . . . . . . 
            `, SpriteKind.Player)
        controller.moveSprite(smiley, 100, 100)
        smiley.setStayInScreen(true)
        pizza = sprites.create(img`
            . . . . . . b b b b . . . . . . 
            . . . . . . b 4 4 4 b . . . . . 
            . . . . . . b b 4 4 4 b . . . . 
            . . . . . b 4 b b b 4 4 b . . . 
            . . . . b d 5 5 5 4 b 4 4 b . . 
            . . . . b 3 2 3 5 5 4 e 4 4 b . 
            . . . b d 2 2 2 5 7 5 4 e 4 4 e 
            . . . b 5 3 2 3 5 5 5 5 e e e e 
            . . b d 7 5 5 5 3 2 3 5 5 e e e 
            . . b 5 5 5 5 5 2 2 2 5 5 d e e 
            . b 3 2 3 5 7 5 3 2 3 5 d d e 4 
            . b 2 2 2 5 5 5 5 5 5 d d e 4 . 
            b d 3 2 d 5 5 5 d d d 4 4 . . . 
            b 5 5 5 5 d d 4 4 4 4 . . . . . 
            4 d d d 4 4 4 . . . . . . . . . 
            4 4 4 4 . . . . . . . . . . . . 
            `, SpriteKind.Food)
        info.startCountdown(10)
        info.setScore(0)
    }
    if (option == "成就") {
        blockMenu.closeMenu()
        if (controller.A.isPressed()) {
            blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
        }
    }
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()

13.function showPlayerInfo ()為讀取存儲的資料並顯示出來


//定義初始變數值
let high = 0
let name: string = null
//

///定義三個function

//將資料寫入記憶體
function writePlayerInfo () {
    settings.writeString('Name', name)
}

//讀取存儲的資料並顯示出來
function showPlayerInfo () {
    game.splash("Name:" + name + "  HIGH Score:" + record)
}

//讀取寫入記憶體的資料
function readPlayerInfo () {
    name = settings.readString('Name')
}
///

info.onCountdownEnd(function () {
    if (info.score() > record) {
        record = info.score()
    }
    game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
    record += 1
    info.changeScoreBy(1)
    info.startCountdown(10)
    otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
    if (option == "新遊戲") {
        blockMenu.closeMenu()
        scene.setBackgroundColor(7)
        smiley = sprites.create(img`
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 . 
            . 5 5 5 f f 5 5 5 f f 5 5 5 . . 
            . 5 5 5 5 5 f f f 5 5 5 5 5 . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . . . . . . . . . . . . . . . 
            `, SpriteKind.Player)
        controller.moveSprite(smiley, 100, 100)
        smiley.setStayInScreen(true)
        pizza = sprites.create(img`
            . . . . . . b b b b . . . . . . 
            . . . . . . b 4 4 4 b . . . . . 
            . . . . . . b b 4 4 4 b . . . . 
            . . . . . b 4 b b b 4 4 b . . . 
            . . . . b d 5 5 5 4 b 4 4 b . . 
            . . . . b 3 2 3 5 5 4 e 4 4 b . 
            . . . b d 2 2 2 5 7 5 4 e 4 4 e 
            . . . b 5 3 2 3 5 5 5 5 e e e e 
            . . b d 7 5 5 5 3 2 3 5 5 e e e 
            . . b 5 5 5 5 5 2 2 2 5 5 d e e 
            . b 3 2 3 5 7 5 3 2 3 5 d d e 4 
            . b 2 2 2 5 5 5 5 5 5 d d e 4 . 
            b d 3 2 d 5 5 5 d d d 4 4 . . . 
            b 5 5 5 5 d d 4 4 4 4 . . . . . 
            4 d d d 4 4 4 . . . . . . . . . 
            4 4 4 4 . . . . . . . . . . . . 
            `, SpriteKind.Food)
        info.startCountdown(10)
        info.setScore(0)
    }
    if (option == "成就") {
        blockMenu.closeMenu()
        if (controller.A.isPressed()) {
            blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
        }
    }
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()

14.在if (option == "新遊戲"){ }裡輸入name = game.askForString("What is your name?")讓遊戲開始時會要求輸入名字,然後在if (info.score() > record) {}裡輸入writePlayerInfo ()使如果破紀錄會將名字寫入記憶體


//定義初始變數值
let high = 0
let name: string = null
//

///定義三個function

//將資料寫入記憶體
function writePlayerInfo () {
    settings.writeString('Name', name)
}

//讀取存儲的資料並顯示出來
function showPlayerInfo () {
    game.splash("Name:" + name + "  HIGH Score:" + record)
}

//讀取寫入記憶體的資料
function readPlayerInfo () {
    name = settings.readString('Name')
}
///


info.onCountdownEnd(function () {
    if (info.score() > record) {
        record = info.score()
        writePlayerInfo () //如果破紀錄會將名字寫入記憶體
    }
    game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
    record += 1
    info.changeScoreBy(1)
    info.startCountdown(10)
    otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
    if (option == "新遊戲") {
        blockMenu.closeMenu()
        
        //開始遊戲時要求輸入名字
        name = game.askForString("What is your name?") 
        
        scene.setBackgroundColor(7)
        smiley = sprites.create(img`
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 . 
            . 5 5 5 f f 5 5 5 f f 5 5 5 . . 
            . 5 5 5 5 5 f f f 5 5 5 5 5 . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . . . . . . . . . . . . . . . 
            `, SpriteKind.Player)
        controller.moveSprite(smiley, 100, 100)
        smiley.setStayInScreen(true)
        pizza = sprites.create(img`
            . . . . . . b b b b . . . . . . 
            . . . . . . b 4 4 4 b . . . . . 
            . . . . . . b b 4 4 4 b . . . . 
            . . . . . b 4 b b b 4 4 b . . . 
            . . . . b d 5 5 5 4 b 4 4 b . . 
            . . . . b 3 2 3 5 5 4 e 4 4 b . 
            . . . b d 2 2 2 5 7 5 4 e 4 4 e 
            . . . b 5 3 2 3 5 5 5 5 e e e e 
            . . b d 7 5 5 5 3 2 3 5 5 e e e 
            . . b 5 5 5 5 5 2 2 2 5 5 d e e 
            . b 3 2 3 5 7 5 3 2 3 5 d d e 4 
            . b 2 2 2 5 5 5 5 5 5 d d e 4 . 
            b d 3 2 d 5 5 5 d d d 4 4 . . . 
            b 5 5 5 5 d d 4 4 4 4 . . . . . 
            4 d d d 4 4 4 . . . . . . . . . 
            4 4 4 4 . . . . . . . . . . . . 
            `, SpriteKind.Food)
        info.startCountdown(10)
        info.setScore(0)
    }
    if (option == "成就") {
        blockMenu.closeMenu()
        if (controller.A.isPressed()) {
            blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
        }
    }
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()

15.在if (option == "成就") {}裡輸入readPlayerInfo()讀取已寫入的名字、showPlayerInfo()將讀取到的名字顯示出來。


//定義初始變數值
let high = 0
let name: string = null
//

///定義三個function

//將資料寫入記憶體
function writePlayerInfo () {
    settings.writeString('Name', name)
}

//讀取存儲的資料並顯示出來
function showPlayerInfo () {
    game.splash("Name:" + name + "  HIGH Score:" + record)
}

//讀取寫入記憶體的資料
function readPlayerInfo () {
    name = settings.readString('Name')
}
///


info.onCountdownEnd(function () {
    if (info.score() > record) {
        record = info.score()
        writePlayerInfo () //如果破紀錄會將名字寫入記憶體
    }
    game.over(blockMenu.isMenuOpen())
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
    record += 1
    info.changeScoreBy(1)
    info.startCountdown(10)
    otherSprite.setPosition(randint(0, scene.screenWidth()), randint(0, scene.screenHeight()))
})
blockMenu.onMenuOptionSelected(function (option, index) {
    if (option == "新遊戲") {
        blockMenu.closeMenu()
        
        //開始遊戲時要求輸入名字
        name = game.askForString("What is your name?") 
        
        scene.setBackgroundColor(7)
        smiley = sprites.create(img`
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            . 5 5 5 5 5 5 5 5 5 5 5 5 5 . . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 f 5 5 5 f 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 . 
            5 5 5 f 5 5 5 5 5 5 5 f 5 5 5 . 
            . 5 5 5 f f 5 5 5 f f 5 5 5 . . 
            . 5 5 5 5 5 f f f 5 5 5 5 5 . . 
            . . 5 5 5 5 5 5 5 5 5 5 5 . . . 
            . . . . 5 5 5 5 5 5 5 . . . . . 
            . . . . . . . . . . . . . . . . 
            `, SpriteKind.Player)
        controller.moveSprite(smiley, 100, 100)
        smiley.setStayInScreen(true)
        pizza = sprites.create(img`
            . . . . . . b b b b . . . . . . 
            . . . . . . b 4 4 4 b . . . . . 
            . . . . . . b b 4 4 4 b . . . . 
            . . . . . b 4 b b b 4 4 b . . . 
            . . . . b d 5 5 5 4 b 4 4 b . . 
            . . . . b 3 2 3 5 5 4 e 4 4 b . 
            . . . b d 2 2 2 5 7 5 4 e 4 4 e 
            . . . b 5 3 2 3 5 5 5 5 e e e e 
            . . b d 7 5 5 5 3 2 3 5 5 e e e 
            . . b 5 5 5 5 5 2 2 2 5 5 d e e 
            . b 3 2 3 5 7 5 3 2 3 5 d d e 4 
            . b 2 2 2 5 5 5 5 5 5 d d e 4 . 
            b d 3 2 d 5 5 5 d d d 4 4 . . . 
            b 5 5 5 5 d d 4 4 4 4 . . . . . 
            4 d d d 4 4 4 . . . . . . . . . 
            4 4 4 4 . . . . . . . . . . . . 
            `, SpriteKind.Food)
        info.startCountdown(10)
        info.setScore(0)
    }
    if (option == "成就") {
        blockMenu.closeMenu()
        
        readPlayerInfo()    //讀取已寫入的名字
        showPlayerInfo()    //將讀取到的名字顯示出來
        
        if (controller.A.isPressed()) {
            blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
        }
    }
})
let pizza: Sprite = null
let smiley: Sprite = null
let record = 0
blockMenu.showMenu(["新遊戲", "成就"], MenuStyle.List, MenuLocation.BottomHalf)
record = info.highScore()

完成範例連結

作者:蔡宇倫

上一篇
Arcade再進化-迷宮產生器(3)
下一篇
Arcade再進化-空島跳躍者(4)
系列文
玩game學打code。街機程式設計再進化。微軟Arcade30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言